import pandas as pd
import json
import geopandas as gpd
import numpy as np
import pandas as pd
# Указываем путь к .geojson файлу
file_path = 'C:/Users/minot/Desktop/irkutskaia-oblast.geojson'
# Используем функцию read_file() для чтения .geojson файла и создания geopandas.GeoDataFrame
df = gpd.read_file(file_path)
# Выводим первые строки содержимого GeoDataFrame
print(df.head())
id tags \
0 2614556 [Дорожно-транспортные происшествия, ДТП и пост...
1 2732314 [Дорожно-транспортные происшествия]
2 2604020 [Дорожно-транспортные происшествия]
3 2603233 [Дорожно-транспортные происшествия]
4 2713219 [Дорожно-транспортные происшествия, ДТП и пост...
light \
0 Светлое время суток
1 В темное время суток, освещение отсутствует
2 В темное время суток, освещение отсутствует
3 В темное время суток, освещение не включено
4 Светлое время суток
point \
0 {'lat': 54.900044, 'long': 99.026245}
1 {'lat': 54.904917, 'long': 99.011149}
2 {'lat': 54.629636, 'long': 99.854393}
3 {'lat': 54.887469, 'long': 99.024893}
4 {'lat': 54.905744, 'long': 99.022962}
nearby region \
0 [Остановка общественного транспорта, Нерегулир... Нижнеудинский район
1 [] Нижнеудинский район
2 [] Нижнеудинский район
3 [Жилые дома индивидуальной застройки, Нерегули... Нижнеудинский район
4 [] Нижнеудинский район
scheme address weather \
0 930 г Нижнеудинск, ул Масловского, 16 [Ясно]
1 870 г Нижнеудинск, ул Западная 3-я, 20 [Пасмурно]
2 830 Р-255 Сибирь Новосибирск - Кемерово - Краснояр... [Пасмурно]
3 800 г Нижнеудинск, ул Профсоюзная, 128 [Дождь]
4 060 г Нижнеудинск, пер Уватский, 12 [Ясно]
category ... severity \
0 Наезд на препятствие ... Легкий
1 Наезд на пешехода ... Легкий
2 Наезд на пешехода ... С погибшими
3 Наезд на пешехода ... Легкий
4 Наезд на велосипедиста ... Легкий
vehicles dead_count \
0 [ { "year": 1995, "brand": "ВАЗ", "color": "Бе... 0
1 [ { "year": 1985, "brand": "ВАЗ", "color": "Кр... 0
2 [ { "year": 2018, "brand": "MAN", "color": "Бе... 1
3 [ { "year": null, "brand": null, "color": null... 0
4 [ { "year": 2017, "brand": "ZOTYE", "color": "... 0
participants injured_count \
0 [ ] 2
1 [ { "role": "Пешеход", "gender": "Женский", "v... 1
2 [ { "role": "Пешеход", "gender": "Женский", "v... 0
3 [ { "role": "Пешеход", "gender": "Мужской", "v... 1
4 [ ] 1
parent_region road_conditions \
0 Иркутская область [Отсутствие элементов обустройства остановочно...
1 Иркутская область [Иные недостатки, Сухое, Отсутствие освещения]
2 Иркутская область [Сухое]
3 Иркутская область [Мокрое]
4 Иркутская область [Сухое, Отсутствие, плохая различимость горизо...
participants_count participant_categories \
0 3 [Дети, Все участники]
1 2 [Пешеходы, Все участники]
2 2 [Пешеходы, Все участники]
3 2 [Пешеходы, Все участники]
4 2 [Велосипедисты, Дети, Все участники]
geometry
0 POINT (99.02625 54.90004)
1 POINT (99.01115 54.90492)
2 POINT (99.85439 54.62964)
3 POINT (99.02489 54.88747)
4 POINT (99.02296 54.90574)
[5 rows x 21 columns]
data = df.copy()
# Извлечение координат и преобразование их в числовой формат
data['lat'] = data['point'].apply(lambda x: x['lat'])
data['long'] = data['point'].apply(lambda x: x['long'])
X = data[['lat', 'long']].fillna(0)
#Обрезка данных по координатам Иркутской области
data = data[(data['lat'] >= 51) & (data['long'] >= 95)]
data = data[(data['lat'] <= 64) & (data['long'] <= 120)]
import plotly.express as px
# Вывод карты
fig = px.scatter_mapbox(data, lat='lat', lon='long', zoom=5)
# Добавление базовой карты, выбор размера карты
fig.update_layout(mapbox_style="open-street-map",width = 600, height = 600)
#Классификация цвета данных по тяжести ДТП
fig = px.scatter_mapbox(data, lat='lat', lon='long', color='severity', zoom=5, custom_data=['dead_count', 'participants_count', 'injured_count', 'weather', 'road_conditions', 'severity'])
fig.update_layout(mapbox_style="open-street-map", width=600, height=600)
#Вывод данных в всплывающем окне
fig.update_traces(hovertemplate="<b>Dead count</b>: %{customdata[0]}<br><b>Participants count</b>: %{customdata[1]}<br><b>Injured count</b>: %{customdata[2]}<br><b>Weather</b>: %{customdata[4]}<br><b>Road conditions</b>: %{customdata[5]}<br><b>Severity</b>: %{customdata[6]}")
fig.show()